home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD ROM Paradise Collection 4
/
CD ROM Paradise Collection 4 1995 Nov.iso
/
program
/
swagd_f.zip
/
EGAVGA.SWG
/
0150_Rain Dance Mimic.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1995-03-03
|
2KB
|
73 lines
{
movement mimics dancing rain? [closest analogy I can think of]
}
uses crt;
const Balls = 1900; {increment if too fast: decrement if too slow}
type movement= record
x, y : integer; { position }
dx, dy : integer; { velocity }
ddx, ddy : integer; { acceleration }
color : integer;
MaxYValue: integer;
END;
VAR ch : char;
I : integer;
Ball: array[1..BAlls] of movement;
Procedure VideoMode ( Mode : Byte );
Begin { VideoMode }
Asm
Mov AH,00
Mov AL,Mode
Int 10h
End;
End; { VideoMode }
procedure PutDot(x,y,color:integer);
begin
Mem[$A000{VGA_Segment}:(y*320)+x] := color;
end;
BEGIN
videoMODE($13);
randomize;
{init all balls}
for i:=1 to BAlls do BEGIN
With ball[i] do BEGIN
ddx := 0; { no horizontal acceleration }
ddy := 1; { constant vertical acceleration }
dx := Random(2)-1; { push it left of right to start}
if dx=0 then dx:=1; { all balls will have a horizontal movement}
dy:=0; { the object is initially at rest }
x := I div ((i div 320)+1); { initial coordinates, as }
y := i mod 130+random(3); { you specified }
color:=random(I mod 255); {Each Balls color}
MaxYValue:=Y+1;
END; {with}
END; {for do loop}
WHILE not(keypressed) do begin
FOR i:=1 to Balls do BEGIN
With ball[i] do BEGIN
putdot(x, y, 0); { blank out the pixel drawn on the last iteration }
dx := dx + ddx; { updating velocity }
dy := dy + ddy;
x := x + dx; { updating position }
y := y + dy;
IF x< 1 then begin {hits left of screen}
X:=1;
dx:=dx*-1;
End;
IF x > 319 then begin {hits right of screen}
x :=319;
dx:=-dx;
END;
IF y > 190 then begin { BOUNCE! }
y := 190;
dy := -dy;
End;
putdot(x, y, color); { draw the pixel at the new position }
END; {WITH}
END; {for do loop}
End; {KEYPRESS}
videoMODe($3);
end. {PROGRAM}